createClass本质上是一个工厂函数,extends的方式更加接近最新的ES6规范的class写法。两种方式在语法上的差别主要体现在方法的定义和静态属性的声明上。
createClass方式的方法定义使用逗号,隔开,因为creatClass本质上是一个函数,传递给它的是一个Object;
而class的方式定义方法时务必谨记不要使用逗号隔开,这是ES6 class的语法规范。
React.createClass和extends Component的区别主要在于:
语法区别
React.createClass
1 | import React from 'react'; |
React.Component
1 | import React from 'react'; |
后一种方法使用ES6的语法,用constructor
构造器来构造默认的属性和状态。
propType 和 getDefaultProps
React.createClass:通过propTypes
对象和getDefaultProps()
方法来设置和获取props
.
1 | import React from 'react'; |
React.Component:通过设置两个属性propTypes
和defaultProps
1 | import React form 'react'; |
状态的区别
React.createClass:通过getInitialState()
方法返回一个包含初始值的对象
1 | import React from 'react'; |
React.Component:通过constructor
设置初始状态
1 | import React from 'react'; |
this区别
React.createClass:会正确绑定this
1 | import React from 'react'; |
React.Component:由于使用了 ES6,这里会有些微不同,属性并不会自动绑定到 React 类的实例上。
1 | import React from 'react'; |
我们还可以在 constructor 中来改变 this.handleClick 执行的上下文,这应该是相对上面一种来说更好的办法,万一我们需要改变语法结构,这种方式完全不需要去改动 JSX 的部分:
1 | import React from 'react'; |
Mixins
如果我们使用 ES6 的方式来创建组件,那么 React mixins
的特性将不能被使用了。
React.createClass:使用 React.createClass 的话,我们可以在创建组件时添加一个叫做 mixins
的属性,并将可供混合的类的集合以数组的形式赋给mixins
。
1 | import React from 'react'; |